{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 一元线性回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "基本形式\n",
    "$$\\tag{1}\n",
    "f(\\mathbf{x}) = w_1 x_1 + w_2 x_2 + ... + w_d x_d + b\n",
    "$$\n",
    "向量形式\n",
    "$$\\tag{2}\n",
    "f(\\mathbf{x}) = \\mathbf{w}^\\mathrm{T}\\mathbf{x}+b\n",
    "$$\n",
    "其中$\\mathbf{w} = (w_1; w_2; ...; w_d)$.\n",
    "\n",
    "针对一元线性回归，我们有\n",
    "$$\\tag{3}\n",
    "f(x) = w x + b$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 读取数据\n",
    "数据处理包括：数据分析、清理，数据集划分等"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:44.982355Z",
     "start_time": "2019-09-27T06:31:44.979358Z"
    }
   },
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'numpy'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-3-0aa0b027fcb6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'numpy'"
     ]
    }
   ],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:46.491357Z",
     "start_time": "2019-09-27T06:31:45.135356Z"
    }
   },
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'pandas'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-2-cb3b41bcf932>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[1;31m# 使用pandas读取csv数据\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'data/kaggle_house_price_prediction/kaggle_hourse_price_train.csv'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[1;31m# 打印前5行\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'pandas'"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# 使用pandas读取csv数据\n",
    "data = pd.read_csv('data/kaggle_house_price_prediction/kaggle_hourse_price_train.csv')\n",
    "# 打印前5行\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:46.542355Z",
     "start_time": "2019-09-27T06:31:46.501361Z"
    }
   },
   "outputs": [],
   "source": [
    "# 丢弃有缺失值的特征（列）\n",
    "data.dropna(axis = 1, inplace = True)\n",
    "\n",
    "# 只保留整数的特征\n",
    "data = data[[col for col in data.dtypes.index if data.dtypes[col] == 'int64']]\n",
    "# 上下等价\n",
    "idx_list = []\n",
    "for col in data.dtypes.index:\n",
    "    if data.dtypes[col] == 'int64':\n",
    "        idx_list.append(col)\n",
    "data = data[idx_list]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本题的要求是，针对LotArea, BsmtUnfSF, GarageArea三个特征，使用训练集训练三个一元线性回归模型，对比其在测试集上的MAE和RMSE，并且要绘制曲线。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所以我们只保留这三列与标记这一列，总共四列的数据即可"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:46.566358Z",
     "start_time": "2019-09-27T06:31:46.547358Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'data' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-4-67b3240854f6>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[0mfeatures\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;34m'LotArea'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'BsmtUnfSF'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'GarageArea'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[0mtarget\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'SalePrice'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0mdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mfeatures\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mtarget\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      5\u001b[0m \u001b[0mdata\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'data' is not defined"
     ]
    }
   ],
   "source": [
    "# 地块尺寸 未完成的地下室平方英尺 车库的面积\n",
    "features = ['LotArea', 'BsmtUnfSF', 'GarageArea']\n",
    "target = 'SalePrice'\n",
    "data = data[features + [target]]\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 打乱数据顺序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:48.231443Z",
     "start_time": "2019-09-27T06:31:48.226437Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.utils import shuffle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:48.586440Z",
     "start_time": "2019-09-27T06:31:48.580447Z"
    }
   },
   "outputs": [],
   "source": [
    "data_shuffled = shuffle(data, random_state = 32) # 这个32不要改变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:57.349293Z",
     "start_time": "2019-09-27T06:31:57.338331Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>LotArea</th>\n",
       "      <th>BsmtUnfSF</th>\n",
       "      <th>GarageArea</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>363</th>\n",
       "      <td>1680</td>\n",
       "      <td>321</td>\n",
       "      <td>264</td>\n",
       "      <td>118000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>529</th>\n",
       "      <td>32668</td>\n",
       "      <td>816</td>\n",
       "      <td>484</td>\n",
       "      <td>200624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1394</th>\n",
       "      <td>4045</td>\n",
       "      <td>286</td>\n",
       "      <td>648</td>\n",
       "      <td>246578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>803</th>\n",
       "      <td>13891</td>\n",
       "      <td>1734</td>\n",
       "      <td>1020</td>\n",
       "      <td>582933</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>832</th>\n",
       "      <td>9548</td>\n",
       "      <td>458</td>\n",
       "      <td>613</td>\n",
       "      <td>237000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      LotArea  BsmtUnfSF  GarageArea  SalePrice\n",
       "363      1680        321         264     118000\n",
       "529     32668        816         484     200624\n",
       "1394     4045        286         648     246578\n",
       "803     13891       1734        1020     582933\n",
       "832      9548        458         613     237000"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_shuffled.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 取前70%的数据为训练集，后30%为测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:42:25.586080Z",
     "start_time": "2019-09-27T06:42:25.577116Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1460, 4)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "num_of_samples = data_shuffled.shape[0]\n",
    "split_line = int(num_of_samples * 0.7)\n",
    "train_data = data.iloc[:split_line]\n",
    "test_data = data.iloc[split_line:]\n",
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:58.497295Z",
     "start_time": "2019-09-27T06:31:58.490292Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1021, 4)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-09-27T06:31:58.945295Z",
     "start_time": "2019-09-27T06:31:58.938293Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(439, 4)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 编写模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们以类(class)的形式编写这个模型，python中的类很简单，只不过这个类里面需要调用两个函数，一个是get_w，这个是计算模型w的函数，另一个是get_b，计算模型b的函数，需要大家来完成。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "本实验要求使用最小二乘法求解一元线性回归模型  \n",
    "求解$w$和$b$使均方误差$E_{(w,b)} = \\sum^m_{i=1}(y_i - wx_i - b)^2$最小化的过程，称为线性回归模型的最小二乘“参数估计”(parameter estimation)。我们可将$E_{(w,b)}$分别对$w$和$b$求导，得到\n",
    "$$\\tag{4}\n",
    "\\frac{\\partial E_{(w,b)}}{\\partial w} = 2(w \\sum^m_{i=1} x^2_i - \\sum^m_{i=1} (y_i - b) x_i),\n",
    "$$\n",
    "\n",
    "$$\\tag{5}\n",
    "\\frac{\\partial E_{(w,b)}}{\\partial b} = 2(mb - \\sum^m_{i=1}(y_i - w x_i))\n",
    "$$\n",
    "\n",
    "然后令式(4)和式(5)为0，可得到$w$和$b$的闭式解(closed-form solution)\n",
    "$$\\tag{6}\n",
    "w = \\frac{\\sum^m_{i=1} y_i(x_i - \\bar{x})}{\\sum^m_{i=1}x^2_i - \\frac{1}{m}(\\sum^m_{i=1}x_i)^2}\n",
    "$$\n",
    "\n",
    "$$\\tag{7}\n",
    "b = \\frac{1}{m}\\sum^m_{i=1}(y_i - w x_i)\n",
    "$$\n",
    "其中，$\\bar{x} = \\frac{1}{m}\\sum^m_{i=1}x_i$为$x$的均值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先编写求解w的函数，传入的参数就是x和y，都是np.ndarray类型的，或是pd.Series类型的（其实都一样）。我们需要大家在下面完成式(6)和式(7)的求解过程，将计算得到的w和b的值返回"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_w(x, y):\n",
    "    '''\n",
    "    这个函数是计算模型w的值的函数，\n",
    "    传入的参数分别是x和y，表示数据与标记\n",
    "    \n",
    "    Parameter\n",
    "    ----------\n",
    "        x: np.ndarray，pd.Series，传入的特征数据\n",
    "\n",
    "        y: np.ndarray, pd.Series，对应的标记\n",
    "    \n",
    "    Returns\n",
    "    ----------\n",
    "        w: float, 模型w的值\n",
    "    '''\n",
    "    \n",
    "    # m表示样本的数量\n",
    "    m = \n",
    "    \n",
    "    # 求x的均值\n",
    "    x_mean = \n",
    "    \n",
    "    # 求w的分子部分\n",
    "    numerator = \n",
    "    \n",
    "    # 求w的分母部分\n",
    "    denominator = \n",
    "    \n",
    "    # 求w\n",
    "    w = \n",
    "    \n",
    "    # 返回w\n",
    "    return w"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_b(x, y, w):\n",
    "    '''\n",
    "    这个函数是计算模型b的值的函数，\n",
    "    传入的参数分别是x, y, w，表示数据，标记以及模型的w值\n",
    "    \n",
    "    Parameter\n",
    "    ----------\n",
    "        x: np.ndarray，pd.Series，传入的特征数据\n",
    "\n",
    "        y: np.ndarray, pd.Series，对应的标记\n",
    "        \n",
    "        w: np.ndarray, pd.Series，模型w的值\n",
    "    \n",
    "    Returns\n",
    "    ----------\n",
    "        b: float, 模型b的值\n",
    "    '''\n",
    "    # 样本个数\n",
    "    m = \n",
    "    \n",
    "    # 求b\n",
    "    b = \n",
    "    \n",
    "    # 返回b\n",
    "    return b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面这个类，就是一个最简单的一元线性回归的类，我们已经帮你实现好了三个方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "class myLinearRegression:\n",
    "    def __init__(self):\n",
    "        '''\n",
    "        类的初始化方法，不需要初始化的参数\n",
    "        这里设置了两个成员变量，用来存储模型w和b的值\n",
    "        '''\n",
    "        self.w = None\n",
    "        self.b = None\n",
    "    \n",
    "    def fit(self, x, y):\n",
    "        '''\n",
    "        这里需要编写训练的函数，也就是调用模型的fit方法，传入特征x的数据和标记y的数据\n",
    "        这个方法就可以求解出w和b\n",
    "        '''\n",
    "        self.w = get_w(x, y)\n",
    "        self.b = get_b(x, y, self.w)\n",
    "        \n",
    "    def predict(self, x):\n",
    "        '''\n",
    "        这是预测的函数，传入特征的数据，返回模型预测的结果\n",
    "        '''\n",
    "        if self.w == None or self.b == None:\n",
    "            print(\"模型还未训练，请先调用fit方法训练\")\n",
    "            return \n",
    "        \n",
    "        return self.w * x + self.b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个模型的实例\n",
    "model1 = myLinearRegression()\n",
    "\n",
    "# 使用训练集对模型进行训练，传入训练集的LotArea和标记SalePrice\n",
    "model1.fit(train_data['LotArea'], train_data['SalePrice'])\n",
    "\n",
    "# 对测试集进行预测，并将结果存储在变量prediction中\n",
    "prediction1 = model1.predict(test_data['LotArea'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 性能度量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "模型训练完成后，还需要在测试集上验证其预测能力，这就需要计算模型的一些性能指标，如MAE和RMSE等。\n",
    "\n",
    "$$\\tag{8}\n",
    "MAE(\\hat{y}, y) = \\frac{1}{m} \\sum^m_{i=1} \\vert \\hat{y} - y \\vert\n",
    "$$\n",
    "\n",
    "$$\\tag{9}\n",
    "RMSE(\\hat{y}, y) = \\sqrt{\\frac{1}{m} \\sum^m_{i=1} (\\hat{y} - y)^2}\n",
    "$$\n",
    "其中，$\\hat{y}$是模型的预测值，$y$是真值，$m$是样本数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def MAE(y_hat, y):\n",
    "    # 请你完成MAE的计算过程\n",
    "    # YOUR CODE HERE\n",
    "    return "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "def RMSE(y_hat, y):\n",
    "    # 请你完成RMSE的计算过程\n",
    "    # YOUR CODE HERE\n",
    "    return"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在此计算出模型在测试集上的MAE与RMSE值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型1，特征：LotArea\n",
      "MAE: 53912.82183112652\n",
      "RMSE: 75795.63312280484\n"
     ]
    }
   ],
   "source": [
    "mae1 = MAE(prediction1, test_data['SalePrice'])\n",
    "rmse1 = RMSE(prediction1, test_data['SalePrice'])\n",
    "print(\"模型1，特征：LotArea\")\n",
    "print(\"MAE:\", mae1)\n",
    "print(\"RMSE:\", rmse1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 模型预测效果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fbe2c601780>"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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YMECOnToUGWbadOmcfrpp9e5f/WhIllERJqChi6Sa5K/40VFsoiIxEXOxgKmL1pLzsaCep/r1ltv5bPPPmPQoEHcfPPNLF68mJEjR3LJJZcwYMAAAL7//e+TlZVFv379mDlzZtmxPXr0YPv27WzYsIG+ffsyadIk+vXrx6hRo9i7dy8QParco0cPpkyZwuDBgxkwYAAff/wxAF999RVnnHEGgwcP5uqrr6Z79+5s3759v74+/PDDHH300Zxyyim8/fbbZfEXXniBYcOGceyxx3L66afz5ZdfsmHDBmbMmMGf//xnBg0axJtvvhmznYiISDzEM1cD/P73v2fo0KEMHDiQKVOmAPDNN99w9tlnc8wxx9C/f3+efPJJ7rnnHrZs2cLIkSMZOXIkULP8vXz5cgYOHMjw4cO5+eab6d+//379cnduuOEGvve973H22Wezbdu2svemTZvG0KFD6d+/P5MnT8bdmT9/PitWrODSSy9l0KBB7N27N2a7Bufu+uNOVlaWNyUrNuT7X15b4ys25Ce6KyLSwD766KNatV+xId/7/HyB97z1Re/z8wX1/r2wfv1679evX9nrRYsWeZs2bXzdunVlsby8PHd337Nnj/fr18+3b9/u7u7du3f3r776ytevX+/p6en+7rvvurv7uHHj/NFHH3V39wkTJvi8efPK2t9zzz3u7j59+nS/6qqr3N39+uuv91//+tfu7v7SSy854F999VVUP7ds2eJHHnmkb9u2zfft2+fHH3+8X3/99e7unp+f76FQyN3dH3jgAb/xxhvd3X3KlCn++9//vuwclbWrKNZ/E2CFJ0F+S+U/TS03NwX6fCFSM8mWq19++WWfNGmSh0IhLykp8bPPPttff/11nz9/vk+cOLGs3Y4dO9y9PF+Xqkn+7tevn7/99tvu7n7LLbdEXb/U008/7aeffroXFxf7559/7u3bty/L+aWfHdzdL7vsMn/++efd3f2UU07x5cuXl71XWbuK6pOb9QioJihnYwGXPriUwuIQLTPSeHxiNlndMxPdLRFJkKXr8igsDhFyKCoOsXRdXoP/TjjuuOOiHrNwzz338OyzzwKwefNm1qxZQ6dOnaKO6dmzJ4MGDQIgKyuLDRs2xDz3BRdcUNbmmWeeAeCtt94qO/9ZZ51FZub+P8+yZcsYMWIEhxxyCADjx4/n008/BcKP5hg/fjxbt26lsLCw0kdE1LSdSHOgzxci8RPvXP3KK6/wyiuvcOyxxwKwe/du1qxZw0knncRNN93ELbfcwjnnnMNJJ51U7bli5e8dO3awa9cujj/+eAAuueQSXnzxxf2OfeONN7j44otJT0/niCOO4NRTTy17b9GiRfzud79jz5495Ofn069fP84999z9zlHTdvWh6dZNUKz/yUSk+cru1YmWGWmkG7TISCO7V6fqD6qltm3bln2/ePFiFi5cyJIlS3j//fc59thjYz6GoVWrVmXfp6enU1xcHPPcpe0i24QHg6tX2e6WP/nJT7jhhhtYtWoV999/f6WPiahpO5HmQJ8vROIn3rna3bntttt47733eO+991i7di1XXXUVRx99NDk5OQwYMIDbbruNadOmVXuuWPm7pnkZYufmb7/9luuuu4758+ezatUqJk2aFDPn1rRdfalIboIa4wOxiKSOrO6ZPD4xmxtH9WmQOz/t2rVj165dlb6/c+dOMjMzadOmDR9//DFLly6t1/ViOfHEE3nqqaeA8Oh4QcH+67eGDRvG4sWLycvLo6ioiHnz5kX1sUuXLgDMnj27LF7xZ6usnUhzpM8XIvET71x95pln8tBDD7F7924APv/8c7Zt28aWLVto06YNl112GTfddBMrV66MeXx1MjMzadeuXVnOnzt3bsx2J598MnPnzqWkpIStW7eyaNEigLJC9+CDD2b37t1RO15H9qWqdg1J062boNL/yZauyyO7VydNhRIRsrpnNtjvgk6dOnHCCSfQv39/Ro8ezdlnnx31/llnncWMGTMYOHAgffr0ITs7u0GuG2nKlClcfPHFPPnkk5xyyil07tyZdu3aRbXp3LkzU6dOZfjw4XTu3JnBgweX7b49depUxo0bR5cuXcjOzmb9+vUAnHvuuVx00UU899xz3HvvvZW2E2mO9PlCJL7imat///vfs3r1aoYPHw7AgQceyGOPPcbatWu5+eabSUtLo0WLFtx3330ATJ48mdGjR9O5c+eyQrY6s2bNYtKkSbRt25YRI0bQvn37/dqcf/75vPbaawwYMKBsY02ADh06MGnSJAYMGECPHj0YOnRo2TFXXHEF11xzDQcccABLliyptF1DstrcGm/KhgwZ4itWrEh0N0REqrV69Wr69u2b6G4k1L59+0hPTycjI4MlS5Zw7bXX8t577yWsP7H+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ipSrE6u+uTnuRTKVrHuKeARETdY9jagQX0wN1j3FuIaISMpr0aIFPXv2THQ3REREpBLK1amtMaZba92TiIiIiIiIpIS43kmOWPd0dUT4TuApM7sK2ASMC+ILgDGE1zDtAa6E8LonMytd9wT7r3t6BDiA8JqnyHVPsa4hIiIiIiIiUqm4Fsla9yQiIiIiIiKppLF2txYRERERERFJeiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFREREREREAiqSRURERERERAIqkkVEREREREQCKpJFRERERJq5nI0FTF+0lpyNBYnuikjCZSS6AyIiIiIikjg5Gwu49MGlFBaHaJmRxuMTs8nqnpnobokkjO4ki4iIiIg0Y0vX5VFYHCLkUFQcYum6vER3SSShVCSLiIiIiDRj2b060TIjjXSDFhlpZPfqlOguiSSUpluLiIiIiDRjWd0zeXxiNkvX5ZHdq5OmWkuzpyJZRERERKSZy+qeqeJYJKDp1iIiIiIiIiIBFclJTFvxi4iIiIiINC5Nt05S2opfRERERESk8elOcpLSVvwiIhIPZtbBzOab2cdmttrMhptZRzN71czWBF8zg7ZmZveY2Voz+4+ZDY44z4Sg/RozmxARzzKzVcEx95iZBfGY1xAREUk2KpKTlLbiFxGROLkb+Ke7fxc4BlgN3Ar8y917A/8KXgOMBnoHfyYD90G44AWmAMOA44ApEUXvfUHb0uPOCuKVXUNERCSpxLVI1mh13ZVuxX/jqD6aai0iIg3CzA4CTgZmAbh7obvvAMYCs4Nms4HvB9+PBf7mYUuBDmbWGTgTeNXd8929AHgVOCt47yB3X+LuDvytwrliXUNERCSpxPtOskar6yGreybXjzxKBbKIiDSUXsBXwMNm9q6ZPWhmbYHD3H0rQPD10KB9F2BzxPG5QayqeG6MOFVcQ0REJKnErUjWaLWIiEjSyQAGA/e5+7HAN1Q9kGwxYl6HeI2Z2WQzW2FmK7766qva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\n",
      "text/plain": [
       "<Figure size 1152x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 创建新的图\n",
    "plt.figure(figsize = (16, 6))\n",
    "\n",
    "# 创建子图1\n",
    "plt.subplot(121) # 121分别代表，生成1行2列个图，这是第1个\n",
    "# 其中的参数为横轴值，纵轴值，label为此条曲线的标签， '.' 表示画出的图的图形为散点图\n",
    "plt.plot(train_data['LotArea'].values, train_data['SalePrice'].values, '.', label = 'training data')\n",
    "# '-' 表示画出的图形为折线图\n",
    "plt.plot(train_data['LotArea'].values, model1.predict(train_data['LotArea']), '-', label = 'prediction')\n",
    "plt.xlabel(\"LotArea\")\n",
    "plt.ylabel('SalePrice')\n",
    "plt.title(\"training set\")\n",
    "plt.legend()\n",
    "\n",
    "# 创建子图2\n",
    "plt.subplot(122) # 121分别代表，生成1行2列个图，这是第2个\n",
    "plt.plot(test_data['LotArea'].values, test_data['SalePrice'].values, '.', label = 'testing data')\n",
    "plt.plot(test_data['LotArea'].values, prediction1, '-', label = 'prediction')\n",
    "plt.xlabel(\"LotArea\")\n",
    "plt.ylabel('SalePrice')\n",
    "plt.title(\"testing set\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 通过左右两图的对比，分析该模型出现的问题，并给出能帮助模型更好的做预测的方案(选做)\n",
    "###### 双击此处展开讨论\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用BsmtUnfSF作为特征，完成模型的训练，指标计算，可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# YOUR CODE HERE\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用GarageArea作为特征，完成模型的训练，指标计算，可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# YOUR CODE HERE\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 选做：剔除训练集中的离群值(outlier)，然后重新训练模型，观察模型预测性能的变化\n",
    "###### 提示：可以使用下面的代码处理数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# YOUR CODE HERE\n",
    "t = train_data[(train_data['LotArea'] < 60000) & (train_data['LotArea'] > 0)] # 将训练集中LotArea小于60000的值存入t\n",
    "t = t[t['SalePrice'] < 500000] # 将t中SalePrice小于500000的值保留\n",
    "\n",
    "# 绘制处理后的数据\n",
    "plt.figure(figsize = (8, 7))\n",
    "plt.plot(t['LotArea'], t['SalePrice'], '.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
